package com.imooc.exception;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import com.imooc.result.CodeMsg;
import com.imooc.result.Result;

/**
 * 异常处理控制器
 * 全局处理&自定义处理
 * @author Guo
 *
 */
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

	
	@ExceptionHandler(value=Exception.class)
	public Result<String> exceptionHandler(HttpServletRequest request,
			Exception e){
		if(e instanceof GlobalException){
			GlobalException ex = (GlobalException)e;
			return Result.error(ex.getCm());
		}else if(e instanceof BindException){
			BindException ex = (BindException)e;
			List<ObjectError> errors = ex.getAllErrors();
			ObjectError error = errors.get(0);
			String errorMessage = error.getDefaultMessage();
			
			return Result.error(CodeMsg.BIND_ERROR.fillArgs(errorMessage));
		}else{
			return Result.error(CodeMsg.SERVER_ERROR);
		}
		
		
	}
	
	
	/**
	 * 全局处理
	 * @param e
	 * @return
	 */
//	@ResponseBody
//	@ExceptionHandler
//	public Map errorHandler(Exception e){
//		Map map = new HashMap();
//		map.put("code", 100);
//		map.put("msg", e.getMessage());
//		
//		return map;
//	}
	
	/**
	 * 拦截捕捉自定义异常
	 * @param e
	 * @return
	 */
//	@ResponseBody
//	@ExceptionHandler
//	public Map customHandler(GlobalException e){
//		Map map = new HashMap();
//		map.put("code", e.getCode());
//		map.put("msg", e.getMsg());
//		
//		return map;
//	}
	
	
	
	
}
